package com.zecan.blog.service;

import com.zecan.blog.dto.user.RegistryUserDto;
import com.zecan.blog.dto.user.UpdateUserInfoDto;
import com.zecan.blog.entity.BlogUser;
import com.zecan.blog.vo.user.UserCenterBlogInfoVo;
import com.zecan.blog.vo.user.bgUserInfoVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @ClassName UserService
 * @Description
 * @date 2022/10/29 18:11
 * @Version 1.0
 */

public interface BlogUserService {

    // 用户名最低长度
    Integer USERNAME_MIN_LENGTH = 3;
    // 用户名最大长度
    Integer USERNAME_MAX_LENGTH = 10;
    //密码最小长度
    Integer PASSWORD_MIN_LENGTH = 5;


    /**
     * 注册逻辑
     *
     * @param userRegConverterEntity 用户实体类
     */
    void registryBlogUser(BlogUser userRegConverterEntity);

    /**
     * 发送验证码的时候进行检查用户信息 并发送验证码
     * @param email 用户邮箱
     * @param emailKey 本次发送验证码的唯一code
     * @param isRegistry 是否是注册  ==> 可能是修改信息
     */
    void sendEmailMsg(String email, String emailKey, Boolean isRegistry);



    /**
     * 获取用户的权限信息
     *
     * @param captchaKey captchaKey
     * @return
     */
    void getCaptchaImg(String captchaKey);


    /**
     * 查询当前邮箱是否存在
     *
     * @param email 邮箱
     * @return
     */
    Boolean selectUserEmailExits(String email);

    /**
     * 根据用户名查询用户信息
     *
     * @param Username
     * @return
     */
    BlogUser selectUserByUsername(String Username);

    /**
     * 用户头像上传 ==> alioss
     * @param multipartFile 头像数据
     * @return 返回在oss 中图片的地址
     */
    String uploadUserAvatar(MultipartFile multipartFile);

    /**
     * 修改用户信息
     * @param blogUser
     */
    void updateUserInfo(BlogUser blogUser);

    /**
     * 在注册的时候检查用户数据信息
     *
     * @param blogUser 前端表单信息
     */
    void checkMsg(RegistryUserDto blogUser);


    /**
     * 用户使用博客数据
     * @param userId
     * @return
     */
    UserCenterBlogInfoVo getUserBlogInfo(Integer userId);


    /**
     * 获取后台系统用户信息
     * @param offset
     * @param limit
     * @return
     */
    List<bgUserInfoVo> getBgUserInfoList(Integer offset , Integer limit);


    void updateBgUserInfo(UpdateUserInfoDto updateUserInfoDto);

    void delUser(Integer userId);

    void resetUserPwd(Integer userId);
}
